跳到主要内容

JZ43 左旋转字符串

https://www.nowcoder.com/practice/12d959b108cb42b1ab72cef4d36af5ec

第一次答案:

直接调用 API

public class Solution {
public String LeftRotateString(String str,int n) {
//保证旋转的位数大于字符串的长度,否则返回空字符串
if (n > str.length())
return "";
//把原字符串截取成俩字符串,然后拼接
String s1 = str.substring(0, n);
String s2 = str.substring(n, str.length());
return s2 + s1;
}
}

第二次

第一次写的根本就是为了应付 AC,实际这题考察的是字符串的旋转

假设 X 的翻转为 XT,XT=cba,同理 YT=fed,那么 YX = (XTYT)T,三次翻转后可得结果。

public class Solution {
public String LeftRotateString(String str,int n) {
//保证旋转的位数大于字符串的长度,否则返回空字符串
if (n > str.length())
return "";
if (n == 0)
return str;

char[] arr = str.toCharArray();
// 假设 X 的翻转为 XT,XT=cba,同理 YT=fed,那么 YX = (XTYT)T,三次翻转后可得结果。
reverse(arr, 0, n - 1);
reverse(arr, n, arr.length - 1);
reverse(arr, 0, arr.length - 1);

return new String(arr);
}

// 翻转字符串
private char[] reverse(char[] strs, int s, int e) {
int left = s;
int right = e;
while (left < right) {
char t = strs[left];
strs[left] = strs[right];
strs[right] = t;
left++;
right--;
}
return strs;
}
}